package per.hx.bs.web.sys.service;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.*;
import per.hx.bs.entity.sys.SysDictDO;
import per.hx.bs.entity.sys.SysDictTypeDO;
import per.hx.bs.entity.sys.SysUserDO;

import java.util.List;
import java.util.Map;

/**
 * @author HuXing
 * @date 2018/3/23  13:33
 */
@FeignClient(value = "Huxingbs-Sys-Service")
public interface SysDictService {


    /**
     * 获取爱好列表
     *
     * @param sysUserDO 用户信息
     * @return 兴趣列表
     */

    @PostMapping(value = "sys-service/dict/hobby")
    List<SysDictDO> getHobbyList(@RequestBody SysUserDO sysUserDO);

    /**
     * 获取性别列表
     *
     * @return 性别列表
     */
    @GetMapping(value = "sys-service/dict/sex")
    List<SysDictDO> getSexList();

    /**
     * 按条件统计数量
     *
     * @param map 条件
     * @return 数量
     */
    @PostMapping(value = "sys-service/dict/count")
    int count(@RequestBody Map<String, Object> map);

    /**
     * 按条件获取数据
     *
     * @param map 条件
     * @return 数据字典集合
     */
    @PostMapping(value = "sys-service/dict/list")
    List<SysDictDO> list(@RequestBody Map<String, Object> map);

    /**
     * 通过数据字典ID 获取数据
     *
     * @param id 数据字典Id
     * @return 数据信息
     */
    @GetMapping(value = "sys-service/dict/{id}")
    SysDictDO get(@PathVariable("id") Long id);

    /**
     * 保存数据字典
     *
     * @param sysDictDO 数据信息
     * @return 影响行数
     */
    @PostMapping(value = "sys-service/dict/save")
    int save(@RequestBody SysDictDO sysDictDO);

    /**
     * 更新数据自动信息
     *
     * @param sysDictDO 数据字典信息
     * @return 影响行数
     */
    @PostMapping(value = "sys-service/dict/update")
    int update(@RequestBody SysDictDO sysDictDO);

    /**
     * 通过id删除数据字典信息
     *
     * @param id 数据字典id
     * @return 影响行数
     */
    @DeleteMapping(value = "sys-service/dict/remove")
    int remove(@RequestParam("id") Long id);

    /**
     * 通过id删除数据字典信息
     *
     * @param ids 数据字典ids
     * @return 影响行数
     */
    @DeleteMapping(value = "sys-service/dict/batchRemove")
    int batchRemove(@RequestParam("ids") Long[] ids);

    /**
     * 获取数据字典类型
     *
     * @param map 条件
     * @return 数据字典类型
     */
    @PostMapping(value = "sys-service/dict/type/list")
    List<SysDictTypeDO> listType(@RequestBody Map<String, Object> map);

    /**
     * 按条件统计数量
     *
     * @param map 条件
     * @return 数量
     */
    @PostMapping(value = "sys-service/dict/type/count")
    int countType(@RequestBody Map<String, Object> map);

    /**
     * 检查数据是否存在
     *
     * @param params 查询条件
     * @return 查询结果
     */
    @PostMapping(value = "sys-service/dict/exit")
    boolean dictExit(@RequestBody Map<String, Object> params);

    /**
     * 检查数据是否存在
     *
     * @param params 查询条件
     * @return 查询结果
     */
    @PostMapping(value = "sys-service/dict/type/exit")
    boolean typeExit(@RequestBody Map<String, Object> params);

    /**
     * 根据type获取数据
     *
     * @param type 数据类型
     * @return 数据字典
     */
    @GetMapping(value = "sys-service/dict/list/{type}")
    List<SysDictDO> listByType(@PathVariable("type") String type);

    /**
     * 保存数据字典类型
     *
     * @param dictTypeDO 枢轴点类型信息
     * @return 影响行数
     */
    @PostMapping(value = "sys-service/dict/type/save")
    int save(@RequestBody SysDictTypeDO dictTypeDO);

    /**
     * 更新数据字典类型
     *
     * @param dictTypeDO 数据类型
     * @return 影响行数
     */
    @PutMapping(value = "sys-service/dict/type/update")
    int updateType(@RequestBody SysDictTypeDO dictTypeDO);

    /**
     * 散发出数据字典
     *
     * @param id 用户数据字典id
     * @return 影响行数
     */
    @DeleteMapping(value = "sys-service/dict/type/remove")
    int removeType(@RequestParam("id") Long id);

    /**
     * 通过id获取 数据类型信息
     *
     * @param id 类型id
     * @return 数据类型
     */
    @GetMapping(value = "sys-service/dict/type/{id}")
    SysDictTypeDO type(@PathVariable("id") Long id);
}
